你所做的這些浮誇的浪漫舉動---其實你做的、你所說的根本一點都不重要,真正重要的是你的意圖。真正重要的是你願意花時間在那個你在乎的人身上,告訴他:「我願意就這樣看著你,也願意聆聽你的聲音。」我很清楚,你現在需要的是什麼,然後我現在在告訴你,你知道這件事情,對我來說有多麼重要。
Jack Pearson《這就是我們》
昨天分享了 Articut ,今天來介紹 Loki。
有了 Articut 的基礎,Loki 就誕生了。不是雷神的弟弟,而是 Linguistic Oriented Keyword Interface (語言導向的關鍵詞介面),是一種自然語言理解的引擎。但在開始之前,我們得先知道,什麼是自然語言理解?
自然語言理解,是自然語言處理的其中一種技術應用,旨在讓電腦可以理解更複雜的語言輸入。我們現在有很多日常生活中的科技都會需要用到自然語言理解的技術,比如說我們平常手機常用的語音助理,就是一種自然語言理解。其最終目的在於,我們有辦法用日常生活中所運用的自然語言,直接與機器進行溝通。這是為了讓人機互動可以更為順暢,且幫助未來的生活可以更加便利,不需要讓人類順應機器的理解模式,來與機器互動。如果我們想知道高鐵時刻表,我們會在 Google 打入:
高鐵 時刻表
但若電腦可以直接理解你的自然語言,我們就不需要使用這種順應機器的說話方式,我們可以直接說:
我想知道有沒有兩點左右台北往台南的高鐵
從這句話中,電腦可以立刻就知道你的意圖是想要知道「兩點左右」**(時間)是否有「台北」(起點站)到「台南」(終點站)**的「高鐵」交通工具,這麼一來,電腦就可以直接回答:
兩點十六分有一班台北往台南的高鐵,請問要幫您訂票嗎?
這是自然語言理解的技術上所欲達成的目標。想像一下,我們可以透過日常生活的對話,直接告訴電腦我想做的事情,不正是大家想像中未來世界應該要有的模樣嗎?
我們人類說的每一句話,裡面都一定隱藏著所謂的「意圖」,而我們就是透過這個「意圖」來互相理解彼此,對於電腦來說也是,而我前面所舉的例子,就是。我們重新回到訂票的案例。
例如:
我要一張兩點以前左營往南港的票
在這句話中,就包含了三個意圖:「車票張數」、「乘車時間」、「起點站」、「終點站」。
實習時,Peter 跟我們說,他的假設是,在同一個情境下,為了達成某種目的或意圖,使用的句型是有限的。想想看,假如要買車票,你可以想出幾種不一樣的說法?直到想不到為止,你就會發現能夠買車票的句型,其實也就那幾句而已。那在這樣的基礎下,也就是「意圖」+「有限句型」兩個要素之下,Loki 誕生了。
在這邊就以我當時實作的專案為例,來進行簡單的 Tutorial。
departure
意圖為例,在建立好意圖後,我們可以看到第三部分。在這裡要思考的是跟售票員說從哪裡到哪裡的時候,有幾種說法?,當初在建置模型時,大家集思廣益了這些句型。垃圾桶就是刪除語句,這應該大家都懂;另外你可能可以發現,在每一句型右邊,都會有數字。以第4句為例,第4句右邊有一個數字6,這代表第4句跟第6句對 Loki 來說是相同的。至於你問我為什麼我還有這些數字,這是因為我實習的時候還沒有這功能啊!歲月催人老
來一一解說各個按鈕的功能各是什麼:若你按下數字,會出現 Articut 的斷詞結果,例如:
在這裡,你就可以確認 Articut 是否有正確理解你的句型。若進階一點的人,則可以按下 regex 確認句型是否有被正確理解。若你按下紅色框框,在這裡我按下「出發」,則會出現以下視窗:
在這裡,系統也會根據機器學習的運算結果,來提示你同義詞可能有哪些,若你勾選這些同義詞,則可以讓 Loki 同時也理解這些詞彙。
從圖中可以發現,「自新竹」對到的是「從台北」的語句,因為「自」跟「從」都是 FUNC_inner,「台北」跟「新竹」則都是 LOCATION。所以這兩種是同一種句型。等一切都確定之後,你再按下部署模型之後,就可以回到上上一頁,再按下**「下載範本」**,並選擇 Python,就會出現 Python 的範本。我們就用編譯器打開樣本。
intent/Loki_departure.py
,你就可以看到以下畫面。在這裡,你可以設定抓到意圖之後要做些什麼,我在這裡做的是將抓取到的資訊存到dict
字典裡,接著就可以透過這些搜集到的資料來做後續的任務。
python3 TransportationBot.py
就可以一次測試句子在所有意圖的運行結果為何。在過去抓取意圖的處理方式,通常也運用統計語言模型,搭配上 embedding 去讓模型猜測你可能的意圖是什麼,但大家都不知道為什麼模型做出的樣的決定,就變得比較像是模型「剛好」猜中你想表達的意思,因此 NLU 對統計觀點的自然語言處理來說,是相對困難的技術。因為解釋力低、而且難以訓練。但是運用 Loki,我們就可以合理推斷並猜測,「從台北」的句型與「自新竹」一致,所以對模型來說,只要能抓到「從台北」的台北,那麼即使你用相同句型的「自新竹」,同樣也能讓模型透過「從台北」的句型抓到「新竹」。